草庐IT

Android AsyncTask 内存泄漏

全部标签

c# - 内存重新排序会导致 C# 访问未分配的内存吗?

据我了解,C#是一种安全语言,不允许访问未分配的内存,除非通过unsafe关键字。但是,它的内存模型允许在线程之间存在不同步访问时重新排序。这会导致竞争危险,其中对新实例的引用似乎在实例完全初始化之前可用于竞争线程,并且是双重检查锁定的一个众所周知的问题。ChrisBrumme(来自CLR团队)在他们的MemoryModel中解释了这一点文章:Considerthestandarddouble-lockingprotocol:if(a==null){lock(obj){if(a==null)a=newA();}}Thisisacommontechniqueforavoidingaloc

c# - 在哪里放置栅栏/内存屏障以保证新的读取/提交的写入?

像许多其他人一样,我一直对不稳定的读/写和栅栏感到困惑。所以现在我正试图完全理解它们的作用。因此,volatile读取应该(1)表现出获取语义(2)保证读取的值是新鲜的,即它不是缓存值。让我们关注(2)。现在,I'veread也就是说,如果你想执行volatile读取,你应该在读取之后引入一个获取栅栏(或一个完整的栅栏),就像这样:intlocal=shared;Thread.MemoryBarrier();这究竟是如何防止读取操作使用以前缓存的值的?根据栅栏的定义(不允许读取/存储在栅栏上方/下方移动),我会在读取之前插入栅栏,防止读取越过栅栏并被移动及时向后(也就是被缓存)。防止读

C# 内存使用

如何获取C#应用程序中使用的实际内存?TaskManager显示不同的指标。ProcessExplorer显示私有(private)字节的使用增加。性能计数器(perfmon.msc)显示不同的指标当我使用.NET内存分析器时,它显示大部分内存已被垃圾收集,只有很少的事件字节。我不知道该相信哪个。 最佳答案 内存使用比显示一两个数字要复杂一些。我建议你看看MarkRussinovich'sexcellentpost在Windows中的不同种类的计数器上。.NET只会让事情变得更复杂。.NET进程只是另一个Windows进程,因此显然

c# - 如何防止 WCF 客户端应用程序中的 BufferManager/PooledBufferManager 浪费内存?

分析一个WCF客户端应用程序(我没有写,仍然不太了解),它通过SOAP与一堆服务对话,运行几天后会抛出OutOfMemoryException,我发现.net的PooledBufferManager会永远不要释放未使用的缓冲区,即使应用程序内存不足,导致OOME。这当然符合规范:http://msdn.microsoft.com/en-us/library/ms405814.aspxThepoolanditsbuffersare[...]destroyedwhenthebufferpoolisreclaimedbygarbagecollection.请随意回答以下问题中的一个,因为我有

c# - XDocument + IEnumerable 导致 System.Xml.Linq.dll 内存不足异常

基本上我有一个程序,当它开始时加载一个文件列表(如FileInfo),并为列表中的每个文件加载一个XML文档(如XDocument).程序然后从其中读取数据到容器类(存储为IEnumerables),此时XDocument超出范围。程序然后将数据从容器类导出到数据库。然而,在导出容器类超出范围后,垃圾收集器并未清理容器类,因为它存储为IEnumerable,似乎导致了XDocument留在内存中(不确定这是否是原因,但任务管理器显示XDocument中的内存未被释放)。由于程序循环遍历多个文件,最终程序抛出内存不足异常。为了缓解这种情况,我最终使用了System.GC.Collect(

c# - 使用 Entity Framework 和 LINQ 查询大型数据集时如何避免内存溢出

我有一个处理所有数据库方法的类,包括EntityFramework相关的东西。当需要数据时,其他类可能会调用此类中的方法,例如publicListGetData(intstart,intend);数据库正在使用LINQtoEF进行查询,然后调用类可以遍历数据。但由于其他类无法访问EF中的实体,我需要对查询执行“ToList()”操作,并将完整的数据集提取到内存中。如果这个集合非常大(10到100GB)会怎样?是否有一种更有效的迭代方式,同时仍然保持松散耦合? 最佳答案 在Entity框架中处理大型数据集的正确方法是:使用EFv4和P

c# - 在C#中从FTP读取文件到内存

我想从FTP服务器读取文件而不将其下载到本地文件。我写了一个函数,但它不起作用:privatestringGetServerVersion(){WebClientrequest=newWebClient();stringurl=FtpPath+FileName;stringversion="";request.Credentials=newNetworkCredential(ftp_user,ftp_pas);try{byte[]newFileData=request.DownloadData(newUri(FtpPath)+FileName);stringfileString=Sys

c# - .NET JIT 代码缓存泄漏?

我们有一个用.Net3.5编写的服务器组件。它在WindowsServer2008StandardEdition上作为服务运行。它工作得很好,但在一段时间(几天)后,我们注意到速度大幅下降和工作集增加。我们预计会发生某种内存泄漏,并使用WinDBG/SOS来分析进程的转储。不幸的是,GC堆没有显示任何泄漏,但我们注意到JIT代码堆已经从开始后的8MB增长到几天后的1GB以上。我们自己不使用任何动态代码生成技术。我们使用以动态代码生成而闻名的Linq2SQL,但我们不知道它是否会导致这样的问题。主要问题是是否有任何技术可以分析转储并检查WinDBG转储中显示的所有主机代码堆block来自

c# - 创建和写入 XML 文件抛出异常 -> 系统内存不足异常?

我已经在XNA中开发一个名为“voxel”的小游戏已有一段时间了。像Minecraft游戏一样的.NETC#。我使用一个简单的概念来保​​存和读取游戏中的数据来构建世界地图。一切都存储在一个xml文件中。现在我正在尝试加载更大的map,并且在生成map期间引发了“paf”异常:[Systemoutofmemoryexception]我不明白为什么,因为在引发异常之后我文件不是很重,大约70mb。在生成最大70mb的XML文件期间出现异常是否正常?使用的开发环境MicrosoftWindows7(x64)位VisualStudio2012专业更新38192内存Inteli5CPU2.5G

c# - 支持前缀搜索的排序文本的节省空间的内存结构

我有一个问题:我需要基于文件路径前缀的文件系统数据的空间高效查找。换句话说,排序文本的前缀搜索。你说用特里树,我也这么想。问题是,尝试的空间效率不够高,并非没有其他技巧。我有相当多的数据:磁盘上大约450M的纯文本Unix格式列表大约800万行gzip默认压缩到31Mbzip2默认压缩到21M我不想占用接近450M的内存。在这一点上,我很乐意使用大约100M的空间,因为有很多前缀形式的冗余。我正在使用C#来完成这项工作,并且一个简单的trie实现仍然需要文件中的每一行都有一个叶节点。鉴于每个叶节点都需要某种对最终文本block的引用(32位,比如字符串数据数组的索引以最小化字符串重复)